//+------------------------------------------------------------------+
//|                                                    BmpButton.mqh |
//|                             Copyright 2000-2025, MetaQuotes Ltd. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#include "WndObj.h"
#include <ChartObjects/ChartObjectsBmpControls.h>
//+------------------------------------------------------------------+
//| Class CBmpButton                                                 |
//| Usage: 位图按钮控件，基于CChartObjectBmpLabel实现                 |
//+------------------------------------------------------------------+
class CBmpButton : public CWndObj
  {
private:
   CChartObjectBmpLabel m_button;           // 图表位图控件对象
   int               m_border;              // 边框宽度
   string            m_bmp_off_name;        // OFF状态位图文件名
   string            m_bmp_on_name;         // ON状态位图文件名
   string            m_bmp_passive_name;    // 被动状态位图文件名
   string            m_bmp_active_name;     // 激活状态位图文件名

public:
                     /** 构造函数：初始化按钮状态 */
                     CBmpButton(void);
                     /** 析构函数：清理资源 */
                    ~CBmpButton(void);

   //--- 创建控件
   /**
    * @brief 在图表上创建位图按钮
    * @param chart 目标图表ID
    * @param name 控件唯一名称
    * @param subwin 子窗口编号
    * @param x1 左上角X坐标
    * @param y1 左上角Y坐标
    * @param x2 右下角X坐标
    * @param y2 右下角Y坐标
    * @return 创建结果
    */
   virtual bool      Create(const long chart,const string name,const int subwin,const int x1,const int y1,const int x2,const int y2);

   //--- 边框设置
   /** 获取当前边框宽度 */
   int               Border(void)          const;
   /** 设置边框宽度 */
   bool              Border(const int value);

   //--- 位图文件设置
   /** 同时设置OFF和ON状态位图 */
   bool              BmpNames(const string off="",const string on="");
   /** 获取OFF状态位图文件名 */
   string            BmpOffName(void)      const;
   /** 设置OFF状态位图文件 */
   bool              BmpOffName(const string name);
   /** 获取ON状态位图文件名 */
   string            BmpOnName(void)       const;
   /** 设置ON状态位图文件 */
   bool              BmpOnName(const string name);
   /** 获取被动状态位图文件名 */
   string            BmpPassiveName(void)  const;
   /** 设置被动状态位图文件 */
   bool              BmpPassiveName(const string name);
   /** 获取激活状态位图文件名 */
   string            BmpActiveName(void)   const;
   /** 设置激活状态位图文件 */
   bool              BmpActiveName(const string name);

   //--- 按钮状态控制
   /** 获取按钮是否处于按下状态 */
   bool              Pressed(void)         const;
   /** 设置按钮按下状态 */
   bool              Pressed(const bool pressed);

   //--- 锁定属性
   /** 获取是否启用锁定模式 */
   bool              Locking(void)         const;
   /** 设置是否启用锁定模式 */
   void              Locking(const bool locking);

protected:
   //--- 对象设置处理器
   virtual bool      OnSetZOrder(void);
   //--- 内部事件处理器
   virtual bool      OnCreate(void);
   virtual bool      OnShow(void);
   virtual bool      OnHide(void);
   virtual bool      OnMove(void);
   virtual bool      OnChange(void);
   virtual bool      OnActivate(void);
   virtual bool      OnDeactivate(void);
   virtual bool      OnMouseDown(void);
   virtual bool      OnMouseUp(void);
  };
//+------------------------------------------------------------------+
